package com.xzx.simple;

/**
 * @className com.xzx.simple algorithm
 * @description: 整数反转
 * @author: xzx
 * @date: 19-3-25 14:47
 * @version: v1
 */
public class IntegerInversion {
    /**
     * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
     * 如果反转后整数溢出那么就返回 0。
     * @param x
     * @return
     */
    public int reverse(int x) {
        return 0;
    }

    /**
     * 用时 50 ms  内存  45.9 MB
     * @param x
     * @return
     */
    public int reverse1(int x) {
        boolean re = x<0?true:false;
        long b = Math.abs((long)x);
        StringBuilder builde = new StringBuilder();
        builde.append(b).reverse();
        Long c = Long.parseLong( builde.toString());
        if(c > Integer.MAX_VALUE){
            return 0 ;
        }
        if (re){
            c = c * (-1);
        }
        return  c.intValue();
    }

    /**
     * 用时 27 ms 内存 37.8 MB
     * @param x
     * @return
     */
    public int reverse2(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}
